package com.cskaoyan.javase._2inner._5anonymous._1notice;

/**
 * 匿名内部类的注意事项：
 *      1.匿名内部类是特殊的局部内部类
 *          在成员方法中的匿名内部类会持有外围类对象的引用
 *          可以直接访问外围类成员
 *
 *          但是在静态成员方法中的匿名内部类，不会持有外围类对象的引用
 *          不可以直接访问外围类成员
 *
 *          并且在匿名内部类当中一旦想要访问方法或者作用域内部的局部变量
 *              那么该局部变量应该是常量。
 *
 *      2.匿名内部类语法中的大括号
 *          表示该匿名子类的类体（是一个类体
 *
 *
 *
 * @since 14:31
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo2 {
}

class EnclosedClazz {
    int a;
    private int b;

    public void test() {
        int num = 100;
        // 创建接口IB的匿名子类对象
        new IB() {
            @Override
            public void test() {
                System.out.println(a);
                System.out.println(b);
                System.out.println(num);
                // System.out.println(num++);
            }
        };
    }

    public static void testStatic() {
        new IB() {
            @Override
            public void test() {
                // System.out.println(a);
                // System.out.println(b);
            }
        };
    }
}

interface IB {
    void test();
}
